<?php

require_once '../ctl/config.php';

class IndexController
{
	public function indexAction()
	{
		require_once 'Zend/Http/Client.php';
		$client = new Zend_Http_Client('http://pikabu.ru/index.php?best=1');
		$client->setConfig(array('timeout' => 30));
		$response = $client->request();
		$body = $response->getBody();
		
		//echo '<meta http-eqexuiv="Content-Type" content="text/html; charset=utf-8">';



		$dom = new Zend_Dom_Query($body);
		$tables = $dom->query('table');

		foreach ($tables as $key => $table) {
			$tableId = $table->getAttribute('id');
			if (!$tableId) continue;
			if (substr($tableId, 0, 12) != 'story_table_') continue;
				
			$info = array();
			$info['ext_id'] = substr($tableId, 12);

			// Смотрим в базе запись, если нету - добавляем
			$extId = intval($info['ext_id']);
			$result = mysql_query("select * from pikabu where ext_id = $extId");
			$row = mysql_fetch_assoc($result);
			//$select = PikabuPeer::getInstance()->select();
			//$select->where('ext_id = ?', $info['ext_id']);
			//$row = PikabuPeer::getInstance()->fetchRow($select);
			
			$tableHtml = $this->get_inner_html($table);
			$d = new Zend_Dom_Query($tableHtml);

			// Получаем рейтинг поста
			$rate = $d->query('li.curs')->current();
			$info['rating'] = $rate->nodeValue;
			// Если пост уже существует - обновляем рейтинг и переходим к следующему
			if ($row) {
				$rating = intval($info['rating']);
				$q = "update pikabu set rating = $rating where ext_id = $extId";
				echo $q . "\n";
				$r = mysql_query($q);
				if (!$r) {
					$e = mysql_error();
					echo $e . "\n";
					error_log($e);
				}
				continue;
			}
			
			// Если поста не существует - это странно, но тем не менее ничего не делаем
			continue;
			
						
			// Получаем ссылку на пост
			$link = $d->query('a.story_link')->current();
			$img = $d->query('img.sv_img')->current();
			$info['post_url'] = $link->getAttribute('href');
			if ($img) {
				$info['plain_image'] = $img->getAttribute('name');
				$info['image_post_url'] = $img->getAttribute('url');
			}

			// Получаем описание поста (его может не быть или оно может быть пустое)
			$short = $d->query('div.short')->current();
			preg_match('/<div class="short" valign="top">(.*?)<\/div>/is', $tableHtml, $matches);
			if (isset($matches[1])) $info['description'] = $matches[1];
			
			// Получаем заголовок поста
			preg_match('/<h2>(.+?)<\/h2>/is', $tableHtml, $matches);
			$info['title'] = $matches[1];

			// Получаем текст для текстовых постов, он вне основной таблицы лежит, поэтому поиск по всему body
			$r = '/id="textDiv' .$info['ext_id']. '"[^>]+>(.*?)<\/div>/is';
			preg_match($r, $body, $matches);
			if (isset($matches[1])) $info['text'] = iconv('WINDOWS-1251', 'UTF-8', $matches[1]);

			// Определяем тип поста по той информации, которую уже успели собрать
			$info['post_type'] = 'url';
			if (isset($info['text']) && $info['text']) $info['post_type'] = 'text';
			if (isset($info['plain_image']) && $info['plain_image']) $info['post_type'] = 'image';
			if (@!$info['plain_image'] && @$info['image_post_url']) $info['post_type'] = 'video';
			
			
			$title = addslashes($info['title']);
			$postUrl = addslashes($info['post_url']);
			
			$url2 = '';
			if (isset($info['image_post_url'])) {
				$image_post_url = addslashes($info['image_post_url']);
				$url2 = "url2 = '$image_post_url', ";
			}
			
			$plainImage = '';
			if (isset($info['plain_image'])) {
				$pI = addslashes($info['plain_image']);
				$plainImage = "image_url = '$pI', ";
			}
			
			$text = '';
			if (isset($info['text'])) {
				$t = addslashes($info['text']);
				$text = "`text` = '$t', ";
			}

			$description = '';
			if (isset($info['description'])) {
				$d = addslashes($info['description']);
				if ($d) {
					$d = "'$d'";
				} else {
					$d = 'NULL';
				}
				$description = "description = $d, ";
			}
			
			$date = date('Y-m-d H:i:s');
			$postType = addslashes($info['post_type']);
			$query = "insert into pikabu set ext_id = $extId, title = '$title', url = '$postUrl', $url2 $plainImage $text $description created = '$date', modified = '$date', post_type = '$postType'";
			echo $query . "\n";
			
			$result = mysql_query($query);
			if (!$result) {
				$e = mysql_error();
				echo $e . "\n";
				error_log($e);
			}
		}
	}


	public function get_inner_html( $node ) {
	    $innerHTML= '';
	    $children = $node->childNodes;
	    foreach ($children as $child) {
		$innerHTML .= $child->ownerDocument->saveXML($child);
	    }

	    return $innerHTML;
	} 
}

$c = new IndexController();
ob_start();
$c->indexAction();
$content = ob_get_contents();
$f = fopen('pikabu.log', 'a+');
fwrite($f, $content);
fclose($f);



